如何用C语言计算出pai<圆周率>后面1000位?跪求 大家帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/26 10:25:33
只要写出程序计算出1000位 当然能要输出几位就几位就更好 拜托大家了

1楼的太复杂了,不太明白。主要是最核心的这一句功能没看懂
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
这一句是用什么公式算圆周率的呢?

主循环是变量c从2800每次减14一直减到零,共循环200次,每次输出圆周率的4位,因此能输出圆周率800位。调节2800(以14的整倍数调整)可以控制圆周率最终的输出位数。

可是14是什么概念呢,我先试了一下将 c-=14; 改成 c-=13; 同时相应地对变量c的初始化按比例将 c=2800 改成 c=2600
发现输出结果的后几位算错了,然后我类似地再将 13 依次改为 12、11、10……
发现输出结果后面的位数算错的越来越多。
然后,我又将 14 分别改为 15、16、17……(同理变量c的初始化分别为 3000、3200、3400……)
这样的结果却没有算错(大于或等于14的结果都是一样的)。

于是我猜测 14 这个数可能是计算精度的最低限制,可为什么是14呢?谁来解释一下?
___________________

顺便研究了一下2楼的,方法简单易理解。只是用浮点算的话似乎算不到那么精确的位数。输出只显示了十来位后面的就全是零了

首先你要知道它是这样的算法.
在高等数学的<<数学分析>>中的傅立叶级数那章就讲了其算法:
pai=4(1-1/3+1/5-1/7+.......)
这样你就可以编程了

#include "stdio.h"
#include<math.h>
viod main()

{int s;
long double pi, n ,t;
t=1;
pi=0;n=1.0;
s=1;
while(fabs(t)>1e-6)
{
pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;